/*
 * @LastEditors: biz
 */
// 加载环境变量
require('dotenv').config();

const express = require('express');
const cors = require('cors');
const path = require('path');
const { setupDatabase } = require('./models/database');
const { initializeScanService } = require('./services/scanner');
const novelRoutes = require('./routes/novel.routes');

// 创建Express应用
const app = express();
const PORT = process.env.PORT || 3001;
const SCAN_INTERVAL = process.env.SCAN_INTERVAL || 3600; // 默认1小时扫描一次
const NOVELS_PATH = process.env.NOVELS_PATH || path.join(__dirname, '../../novels');

// 中间件
app.use(cors());
app.use(express.json());

// 初始化数据库
setupDatabase()
  .then(() => {
    console.log('数据库初始化成功');
    
    // 初始化扫描服务
    initializeScanService(NOVELS_PATH, SCAN_INTERVAL);
    
    // 路由
    app.use('/api', novelRoutes);
    
    // 默认路由
    app.get('/', (req, res) => {
      res.json({ message: 'Novel Reader API 服务正在运行' });
    });
    
    // 404处理
    app.use((req, res) => {
      res.status(404).json({ error: '404 Not Found' });
    });
    
    // 错误处理
    app.use((err, req, res, next) => {
      console.error(err.stack);
      res.status(500).json({ error: '服务器内部错误' });
    });
    
    // 启动服务器
    app.listen(PORT, '0.0.0.0', () => {
      console.log(`服务器运行在 http://0.0.0.0:${PORT}，可通过局域网访问`);
    });
  })
  .catch(err => {
    console.error('数据库初始化失败:', err);
    process.exit(1);
  });

// 处理进程退出
process.on('SIGINT', () => {
  console.log('正在关闭服务器...');
  process.exit(0);
});

module.exports = app; 